unit clsEmpresa;

interface

uses Dm, dbtables, biblio, sysutils, dbclient, xmldom, XMLIntf, msxmldom, XMLDoc;

type
  TEmpresa = class(TObject)
  private
    selecionaEmpresa: Boolean;
    Emp_Codigo: string;
  public
    Cid_Codigo: string;
    Emp_Razao: string;
    Emp_Cnpj: string;
    Emp_Inscest: string;
    Emp_Endereco: string;
    Emp_Telefone: string;
    Emp_cep: string;
    Emp_Fax: string;
    Emp_CxPostal: string;
    Emp_Fantasia: string;
    Emp_Email: string;
    Emp_SimplesNac: string; //S-N
    Nota_Serie: string;
    Emp_Numero: string;
    Emp_Bairro: string;
    Emp_InscestSubstt: string;
    Emp_InscMunicipal: string;
    Emp_AliqISS: Double;
    Emp_IsentaDeIpi: string;
    Emp_DataLimiteIsencao: TDateTime;
    Emp_AliqIpi: double;
    Emp_Ind_Ativ: string;
    Emp_Complemento: string;
    Emp_Ind_Apur: string;
    Ent_codigo: string;
    Perc_Pis: double;
    Perc_Cofins: double;
    CST_Pis: String;
    CST_Cofins: String;

    Emp_CRT: String;
    Emp_CSOSN: String;
    Emp_Origem_ST: String;
    Emp_AliqCalcCred: double;
    Emp_ModBcICMS: String;
    Emp_PercRedBcICMS: double;
    Emp_AliqICMS: double;
    Emp_ModBcICMSST: String;
    Emp_PercRedBcICMSST: double;
    Emp_MvaICMSST: double;
    Emp_AliqICMSST: double;

    constructor create;
    destructor Destroy; override;

    function Gravar(p_Emp_Codigo: string): Byte;
    function Recuperar(p_Emp_Codigo: string): Byte;
    function ListaEmpresa(p_emp: string): string;
    function Recuperar_ultimo: string;
    function Recuperar_primeiro: string;
    function Excluir(p_Emp_Codigo: string): Byte;
    function Recuperar_Q: string;
    procedure Consultar(var p_q: TQuery; p_nome: string);
    procedure Eliminar_Tudo(p_Emp_Codigo: string);
    function Recuperar1Email: string;
    function SerieEmpresa(pSerie, pEmpr: string): Boolean;
    function RetornaSeEstaIsenta(vDttDataBase: TDateTime; vStrEmpresa: string): boolean;
    function RetornaSeOPeriodoVenceu(vStrEmpresa: string): boolean;
    function RetornaUfDaEmpresa(const cStrEmpresa: string): string;

    function executaSelecaodeEmpresas: Boolean;
    function RetornaEmpresaPorEntidade(const cStrEntidade: String): String;
    
  end;

implementation

uses clsControlePadrao, DB, menu;

var
  controle: TControlePadrao;

function TEmpresa.Gravar;
var
  tq: TQuery;
begin
  tq := Tquery.Create(DmInt);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('SELECT * FROM Empresa where Emp_Codigo=:k_Emp_Codigo');
  tq.ParamByName('k_Emp_Codigo').AsString := strzero(p_Emp_Codigo, 3);
  tq.Open;
  if tq.eof then begin
    tq.SQL.Clear;
    tq.Params.Clear;
    tq.SQL.Add('INSERT INTO Empresa VALUES(' +
      ':k_Emp_Codigo,' +
      ':k_Cid_Codigo,' +
      ':k_Emp_Razao,' +
      ':k_Emp_Cnpj,' +
      ':k_Emp_Inscest,' +
      ':k_Emp_Endereco,' +
      ':k_Emp_Telefone,' +
      ':k_Emp_Cep,' +
      ':k_Emp_Fax,' +
      ':k_Emp_CxPostal,' +
      ':k_Emp_Fantasia,' +
      ':k_Emp_Email,' +
      ':k_Emp_SimplesNac,');
    if Nota_Serie <> '' then begin
      tq.SQL.Add(':k_Nota_Serie, ');
    end else begin
      tq.SQL.Add('null, ');
    end;
    tq.SQL.Add(':k_emp_Numero, ' +
      ':k_Emp_Bairro, ' +
      ':k_Emp_InscestSubstt,' +
      ':k_Emp_InscMunicipal, ' +
      ':k_Emp_AliqISS, ' +
      ':k_Emp_IsentaDeIpi, ' +
      ':k_Emp_DataLimiteIsencao, ' +
      ':k_Emp_AliqIpi,' +
      ':k_Emp_Ind_Ativ,' +
      ':k_Emp_Complemento,' +
      ':k_Emp_Ind_Apur,');
    if Ent_codigo <> '' then
      tq.SQL.add(' :k_Ent_codigo,')
    else
      tq.SQL.Add(' null,');
    tq.SQL.Add(':k_Perc_Pis, :k_Perc_Cofins, :k_CST_Pis, :k_CST_Cofins, :k_Emp_CRT, '+
    ':k_Emp_CSOSN, :k_Emp_Origem_ST, :k_Emp_AliqCalcCred, :k_Emp_ModBcICMS, :K_Emp_PercRedBcICMS, :k_Emp_AliqICMS, '+
    ':k_Emp_ModBcICMSST, :k_Emp_PercRedBcICMSST, :k_Emp_MvaICMSST, :k_Emp_AliqICMSST )');

  end else begin
    tq.SQL.Clear;
    tq.Params.Clear;
    tq.SQL.Add('UPDATE Empresa SET ' +
      'Cid_Codigo  =:k_Cid_Codigo,' +
      'Emp_Razao   =:k_Emp_Razao,' +
      'Emp_Cnpj    =:k_Emp_Cnpj,' +
      'Emp_Inscest =:k_Emp_Inscest,' +
      'Emp_Endereco=:k_Emp_Endereco,' +
      'Emp_Telefone=:k_Emp_Telefone,' +
      'Emp_Cep     =:k_Emp_Cep,' +
      'Emp_Fax     =:k_Emp_Fax,' +
      'Emp_CxPostal=:k_Emp_CxPostal,' +
      'Emp_Fantasia=:k_Emp_Fantasia,' +
      'Emp_Email   =:k_Emp_Email,' +
      'Emp_SimplesNac=:k_Emp_SimplesNac,');

    if Nota_Serie <> '' then begin
      tq.SQL.Add('Nota_Serie =:k_Nota_Serie, ');
    end else begin
      tq.SQL.Add('Nota_Serie =null, ');
    end;

    tq.SQL.Add('Emp_Numero = :k_Emp_Numero, ' +
      'Emp_Bairro = :k_Emp_Bairro, ' +
      'Emp_InscestSubstt = :k_Emp_InscestSubstt, ' +
      'Emp_InscMunicipal =:k_Emp_InscMunicipal, ' +
      'Emp_AliqISS =:k_Emp_AliqISS, ' +
      'Emp_IsentaDeIpi = :k_Emp_IsentaDeIpi, ' +
      'Emp_DataLimiteIsencao = :k_Emp_DataLimiteIsencao, ' +
      'Emp_AliqIpi = :k_Emp_AliqIpi, ' +
      'Emp_Ind_Ativ =:k_Emp_Ind_Ativ, ' +
      'Emp_Complemento =:k_Emp_Complemento, ' +
      'Emp_Ind_Apur =:k_Emp_Ind_Apur, ');

    if Ent_codigo <> '' then
      tq.sql.Add('Ent_codigo =:k_Ent_codigo,')
    else
      tq.SQL.Add('Ent_codigo = null,');

    tq.SQL.Add('Perc_Pis =:k_Perc_Pis, Perc_Cofins =:k_Perc_Cofins, CST_Pis =:k_CST_Pis, CST_Cofins =:k_CST_Cofins, '+
    'Emp_CRT =:k_Emp_CRT, Emp_CSOSN =:k_Emp_CSOSN, Emp_Origem_ST =:k_Emp_Origem_ST, Emp_AliqCalcCred =:k_Emp_AliqCalcCred, '+
    'Emp_ModBcICMS =:k_Emp_ModBcICMS, Emp_PercRedBcICMS =:k_Emp_PercRedBcICMS, Emp_AliqICMS =:k_Emp_AliqICMS, '+
    'Emp_ModBcICMSST =:k_Emp_ModBcICMSST, Emp_PercRedBcICMSST =:k_Emp_PercRedBcICMSST, Emp_MvaICMSST =:k_Emp_MvaICMSST, '+
    'Emp_AliqICMSST =:k_Emp_AliqICMSST ');

    tq.SQL.Add('Where Emp_Codigo=:k_Emp_Codigo');
  end;

  tq.ParamByName('k_Emp_Codigo').AsString := strzero(p_Emp_Codigo, 3);
  tq.ParamByName('k_Cid_Codigo').AsString := strzero(Cid_codigo, 4);
  tq.ParamByName('k_Emp_Razao').AsString := Emp_Razao;
  tq.ParamByName('k_Emp_Cnpj').AsString := Emp_Cnpj;
  tq.ParamByName('k_Emp_Inscest').AsString := Emp_Inscest;
  tq.ParamByName('k_Emp_Endereco').AsString := Emp_Endereco;
  tq.ParamByName('k_Emp_Telefone').AsString := Emp_Telefone;
  tq.ParamByName('k_Emp_Cep').AsString := Emp_Cep;
  tq.ParamByName('k_Emp_Fax').AsString := Emp_Fax;
  tq.ParamByName('k_Emp_CxPostal').AsString := Emp_CxPostal;
  tq.ParamByName('k_Emp_Fantasia').AsString := Emp_Fantasia;
  tq.ParamByName('k_Emp_Email').AsString := Emp_Email;
  tq.ParamByName('k_Emp_SimplesNac').AsString := Emp_SimplesNac;
  if Nota_Serie <> '' then begin
    tq.ParamByName('k_Nota_Serie').AsString := Nota_Serie;
  end;
  tq.ParamByName('k_Emp_Numero').AsString := Emp_Numero;
  tq.ParamByName('k_Emp_Bairro').AsString := Emp_Bairro;
  tq.ParamByName('k_Emp_InscestSubstt').AsString := Emp_InscestSubstt;
  tq.ParamByName('k_Emp_InscMunicipal').AsString := Emp_InscMunicipal;
  tq.ParamByName('k_Emp_AliqISS').AsFloat := Emp_AliqISS;
  tq.ParamByName('k_Emp_IsentaDeIpi').AsString := Emp_IsentaDeIpi;
  tq.ParamByName('k_Emp_DataLimiteIsencao').AsDateTime := Emp_DataLimiteIsencao;
  tq.ParamByName('k_Emp_AliqIpi').AsFloat := Emp_AliqIpi;
  tq.ParamByName('k_Emp_Ind_Ativ').AsString := Emp_Ind_Ativ;
  tq.ParamByName('k_Emp_Complemento').AsString := Emp_Complemento;
  tq.ParamByName('k_Emp_Ind_Apur').AsString := Emp_Ind_Apur;
  if Ent_codigo <> '' then
    tq.ParamByName('k_Ent_codigo').AsString := Ent_codigo;
  tq.ParamByName('k_Perc_Pis').AsFloat:= Perc_Pis;
  tq.ParamByName('k_Perc_Cofins').AsFloat:= Perc_Cofins;
  tq.ParamByName('k_CST_Pis').AsString:= CST_Pis;
  tq.ParamByName('k_CST_Cofins').AsString:= CST_Cofins;
  tq.ParamByName('k_Emp_CRT').AsString:= Emp_CRT;
  tq.ParamByName('k_Emp_CSOSN').AsString:= Emp_CSOSN;
  tq.ParamByName('k_Emp_Origem_ST').AsString:= Emp_Origem_ST;
  tq.ParamByName('k_Emp_AliqCalcCred').AsFloat:= Emp_AliqCalcCred;
  tq.ParamByName('k_Emp_ModBcICMS').AsString:= Emp_ModBcICMS;
  tq.ParamByName('k_Emp_PercRedBcICMS').AsFloat:= Emp_PercRedBcICMS;
  tq.ParamByName('k_Emp_AliqICMS').AsFloat:= Emp_AliqICMS;
  tq.ParamByName('k_Emp_ModBcICMSST').AsString:= Emp_ModBcICMSST;
  tq.ParamByName('k_Emp_PercRedBcICMSST').AsFloat:= Emp_PercRedBcICMSST;
  tq.ParamByName('k_Emp_MvaICMSST').AsFloat:= Emp_MvaICMSST;
  tq.ParamByName('k_Emp_AliqICMSST').AsFloat:= Emp_AliqICMSST;
  tq.close;
  tq.ExecSQL;
  result := 1;
  tq.close;
  tq.Free;
end;

function TEmpresa.Recuperar;
var
  tq: TQuery;
begin
  tq := Tquery.Create(DmInt);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.active := False;
  tq.SQL.Clear;
  tq.SQL.Add('SELECT * FROM Empresa where Emp_Codigo=:k_Emp_Codigo');
  tq.Params[0].AsString := strzero(p_Emp_Codigo, 3);
  tq.Open;
  Emp_Codigo := p_Emp_Codigo;
  if tq.eof then begin
    Cid_Codigo := '';
    Emp_Razao := '';
    Emp_Cnpj := '';
    Emp_Inscest := '';
    Emp_Endereco := '';
    Emp_Telefone := '';
    Emp_Cep := '';
    Emp_Fax := '';
    Emp_CxPostal := '';
    Emp_Fantasia := '';
    Emp_Email := '';
    Emp_SimplesNac := '';
    Nota_Serie := '';
    Emp_Numero := '';
    Emp_Bairro := '';
    Emp_IsentaDeIpi := '';
    Emp_DataLimiteIsencao := 0;
    Emp_AliqIpi := 0;
    Emp_Ind_Ativ := '';
    Emp_Complemento := '';
    Emp_Ind_Apur := '';
    Ent_codigo:= '';
    Perc_Pis:= 0;
    Perc_Cofins:= 0;
    CST_Pis:= '';
    CST_Cofins:= '';
    Emp_CRT:= '';
    Emp_CSOSN:= '';
    Emp_Origem_ST:= '';
    Emp_AliqCalcCred:= 0;
    Emp_ModBcICMS:= '';
    Emp_PercRedBcICMS:= 0;
    Emp_AliqICMS:= 0;
    Emp_ModBcICMSST:= '';
    Emp_PercRedBcICMSST:= 0;
    Emp_MvaICMSST:= 0;
    Emp_AliqICMSST:= 0;
    Result := 0;

  end else begin
    Cid_Codigo := tq.FieldByName('Cid_Codigo').AsString;
    Emp_Razao := tq.FieldByName('Emp_Razao').AsString;
    Emp_Cnpj := tq.FieldByName('Emp_Cnpj').AsString;
    Emp_Inscest := tq.FieldByName('Emp_Inscest').AsString;
    Emp_Endereco := tq.FieldByName('Emp_Endereco').AsString;
    Emp_Telefone := tq.FieldByName('Emp_Telefone').AsString;
    Emp_Cep := tq.FieldByName('Emp_Cep').AsString;
    Emp_Fax := tq.FieldByName('Emp_Fax').AsString;
    Emp_CxPostal := tq.FieldByName('Emp_CxPostal').AsString;
    Emp_Fantasia := tq.FieldByName('Emp_Fantasia').AsString;
    Emp_Email := tq.FieldByName('Emp_Email').AsString;
    Emp_SimplesNac := tq.FieldByName('Emp_SimplesNac').AsString;
    Nota_Serie := tq.FieldByName('Nota_Serie').AsString;
    Emp_Numero := tq.FieldByName('Emp_Numero').AsString;
    Emp_Bairro := tq.FieldByName('Emp_Bairro').AsString;
    Emp_InscestSubstt := tq.FieldByName('Emp_InscestSubstt').AsString;
    Emp_InscMunicipal := tq.FieldByName('Emp_InscMunicipal').AsString;
    Emp_AliqISS := tq.FieldByName('Emp_AliqISS').AsFloat;
    Emp_IsentaDeIpi := tq.FieldByName('Emp_IsentaDeIpi').AsString;
    Emp_DataLimiteIsencao := tq.FieldByName('Emp_DataLimiteIsencao').AsDateTime;
    Emp_AliqIpi := tq.FieldByName('Emp_AliqIpi').AsFloat;
    Emp_Ind_Ativ := tq.FieldByname('Emp_Ind_Ativ').AsString;
    Emp_Complemento := tq.FieldByName('Emp_Complemento').AsString;
    Emp_Ind_Apur := tq.FieldByName('Emp_Ind_Apur').AsString;
    Ent_codigo:= tq.FieldByName('Ent_codigo').AsString;
    Perc_Pis:= tq.FieldByName('Perc_Pis').AsFloat;
    Perc_Cofins:= tq.FieldByName('Perc_Cofins').AsFloat;
    CST_Pis:= tq.FieldByName('CST_Pis').AsString;
    CST_Cofins:= tq.FieldByName('CST_Cofins').AsString;
    Emp_CRT:= tq.FieldByName('Emp_CRT').AsString;
    Emp_CSOSN:= tq.FieldByName('Emp_CSOSN').AsString;
    Emp_Origem_ST:= tq.FieldByName('Emp_Origem_ST').AsString;
    Emp_AliqCalcCred:= tq.FieldByName('Emp_AliqCalcCred').AsFloat;
    Emp_ModBcICMS:= tq.FieldByName('Emp_ModBcICMS').AsString;
    Emp_PercRedBcICMS:= tq.FieldByName('Emp_PercRedBcICMS').AsFloat;
    Emp_AliqICMS:= tq.FieldByname('Emp_AliqICMS').AsFloat;
    Emp_ModBcICMSST:= tq.FieldByName('Emp_ModBcICMSST').AsString;
    Emp_PercRedBcICMSST:= tq.FieldByName('Emp_PercRedBcICMSST').AsFloat;
    Emp_MvaICMSST:= tq.FieldByName('Emp_MvaICMSST').AsFloat;
    Emp_AliqICMSST:= tq.FieldByName('Emp_AliqICMSST').AsFloat;

    if (selecionaEmpresa) and (Trim(WstrListadeEmpresas) <> '') then begin
      if pos(strzero(p_Emp_Codigo, 3), WstrListadeEmpresas) > 0 then
        Result := 1
      else
        Result := 0;
    end else begin
      Result := 1;
    end;

  end;

  tq.Close;
  tq.Free;

end;

function TEmpresa.Excluir;
var
  tq: TQuery;
begin
  tq := Tquery.Create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.active := False;
  tq.close;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('DELETE FROM Empresa WHERE Emp_Codigo=:k_Emp_Codigo');
  tq.ParamByName('k_Emp_Codigo').AsString := strzero(p_Emp_Codigo, 3);
  tq.execSQL;
  Result := 1;
  tq.close;
  tq.Free;
end;

procedure TEmpresa.Consultar;
begin
  p_q.SQL.Clear;
  p_q.Params.Clear;
  if (selecionaEmpresa) and (Trim(WstrListadeEmpresas) <> '') then
    p_q.SQL.Add('Select * from Empresa where Emp_Razao>=:k_Emp_Razao and Emp_codigo in (' + WstrListadeEmpresas + ') order by Emp_Razao')
  else
    p_q.SQL.Add('Select * from Empresa where Emp_Razao>=:k_Emp_Razao order by Emp_Razao');
  p_q.ParamByName('k_Emp_Razao').AsString := p_nome;
end;

function TEmpresa.Recuperar_ultimo: string;
var
  tq: TQuery;
begin
  tq := TQuery.create(DmInt.Db);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Select max(emp_codigo) as maior from empresa');
  tq.Open;
  if tq.FieldByName('maior').AsString <> '' then
    Result := IntToStr(strtoint(tq.FieldByName('maior').AsString) + 1)
  else
    Result := '1';
  tq.close;
  tq.free;
end;

function TEmpresa.ListaEmpresa(p_emp: string): string;
var
  tq: TQuery;
  Emp: string;
  i: Integer;
begin
  tq := TQuery.create(DmInt.Db);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Select emp_codigo from empresa');
  tq.Open;
  for i := 0 to tq.RecordCount - 1 do begin
    Emp := Emp + 'Cod. Empresa:   ' + tq.FieldByName('emp_codigo').AsString + #13;
    tq.Next;
  end;
  Result := Emp;
  tq.close;
  tq.free;
end;

procedure TEmpresa.Eliminar_Tudo(p_Emp_Codigo: string);
begin

end;

function TEmpresa.Recuperar_Q;
var
  tq: TQuery;
  xcod: string;
begin
  tq := TQuery.Create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.active := false;
  tq.SQL.Clear;
  tq.SQL.Add('Select Emp_Codigo from Empresa order by Emp_Codigo');
  tq.Open;
  controle := TControlePadrao.Create;
  xcod := '';
  while not tq.eof do begin
    if xcod = '' then begin
      if controle.Recuperar(tq.FieldByName('Emp_Codigo').AsString) then
        xcod := tq.FieldByName('Emp_Codigo').AsString;
    end;
    tq.next;
  end;
  controle.free;
  tq.close;
  tq.free;
  result := xcod;
end;

function TEmpresa.Recuperar1Email: string;
var
  tq: TQuery;
begin
  result := '';
  tq := TQuery.Create(DmInt);
  tq.DatabaseName := DmInt.db.DatabaseName;
  tq.active := false;
  tq.SQL.Clear;
  tq.SQL.Add('Select * from Empresa where emp_email is not null');
  tq.Open;
  result := tq.FieldByName('emp_email').AsString;
  tq.close;
  tq.free;
end;

function TEmpresa.Recuperar_primeiro: string;
var
  tq: TQuery;
begin
  tq := TQuery.create(DmInt.Db);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Select min(emp_codigo) as menor from empresa');
  tq.Open;
  if tq.FieldByName('menor').AsString <> '' then
    Result := tq.FieldByName('menor').AsString
  else
    Result := '001';
  tq.close;
  tq.free;
end;

function TEmpresa.SerieEmpresa(pSerie, pEmpr: string): Boolean;
var
  tq: TQuery;
begin
  tq := TQuery.create(DmInt.Db);
  tq.DatabaseName := DmInt.Db.DatabaseName;
  tq.Active := false;
  tq.SQL.Clear;
  tq.Params.Clear;
  tq.SQL.Add('Select * from Empresa where Emp_Codigo =:a and (Nota_Serie =:b or Nota_serie is null or Nota_Serie ='''')');
  tq.Params[0].AsString := pEmpr;
  tq.Params[1].AsString := pSerie;
  tq.Open;
  Result := not tq.Eof;
  tq.Close;
  tq.Free;
end;

function TEmpresa.RetornaSeEstaIsenta(vDttDataBase: TDateTime; vStrEmpresa: string): boolean;
var
  qryConsultaEmpresa: TQuery;
  strSQL: string;

begin
  qryConsultaEmpresa := TQuery.Create(DmInt.Db);
  qryConsultaEmpresa.DatabaseName := DmInt.Db.DatabaseName;
  qryConsultaEmpresa.Active := false;

  try
    strSQL := 'select Emp_IsentaDeIpi, Emp_DataLimiteIsencao ' +

    'from empresa ' +

    'where Emp_codigo = ' + QuotedStr(vStrEmpresa);

    qryConsultaEmpresa.Close;
    qryConsultaEmpresa.SQL.Clear;
    qryConsultaEmpresa.Params.Clear;
    qryConsultaEmpresa.SQL.Add(strSQL);
    qryConsultaEmpresa.Open;

    Result := false;
    if (qryConsultaEmpresa.FieldByName('Emp_IsentaDeIpi').AsString = 'S') and (vDttDataBase <=
      qryConsultaEmpresa.FieldByName('Emp_DataLimiteIsencao').AsDateTime) then begin
      Result := true;
    end;

  finally
    qryConsultaEmpresa.Close;
    FreeAndNil(qryConsultaEmpresa);

  end;

end;

function TEmpresa.RetornaSeOPeriodoVenceu(vStrEmpresa: string): boolean;
var
  qryConsultaLimite: TQuery;
  strSQL: string;

begin
  qryConsultaLimite := TQuery.Create(DmInt.Db);
  qryConsultaLimite.DatabaseName := DmInt.Db.DatabaseName;
  qryConsultaLimite.Active := false;

  try
    strSQL := 'select Emp_IsentaDeIpi, Emp_DataLimiteIsencao ' +

    'from empresa ' +

    'where Emp_codigo = ' + QuotedStr(vStrEmpresa);

    qryConsultaLimite.Close;
    qryConsultaLimite.SQL.Clear;
    qryConsultaLimite.Params.Clear;
    qryConsultaLimite.SQL.Add(strSQL);
    qryConsultaLimite.Open;

    Result := false;
    if (qryConsultaLimite.FieldByName('Emp_IsentaDeIpi').AsString = 'S') and
      (qryConsultaLimite.FieldByName('Emp_DataLimiteIsencao').AsDateTime < Date) then begin
      Result := true;
    end;

  finally
    qryConsultaLimite.Close;
    FreeAndNil(qryConsultaLimite);

  end;

end;

function TEmpresa.RetornaUfDaEmpresa(const cStrEmpresa: string): string;
var
  qryConsultaEstado: TQuery;
  strSQL: string;

begin
  qryConsultaEstado := TQuery.Create(DmInt.Db);
  qryConsultaEstado.DatabaseName := DmInt.Db.DatabaseName;
  qryConsultaEstado.Active := false;

  try
    strSQL := 'select c.est_sigla ' +

    'from empresa e, cidade c ' +

    'where c.cid_codigo = e.cid_codigo and ' +
      '      e.emp_codigo = ' + QuotedStr(cStrEmpresa) + ' ';

    qryConsultaEstado.Close;
    qryConsultaEstado.SQL.Clear;
    qryConsultaEstado.Params.Clear;
    qryConsultaEstado.SQL.Add(strSQL);
    qryConsultaEstado.Open;

    Result := qryConsultaEstado.FieldByName('est_sigla').AsString;

  finally
    qryConsultaEstado.Close;
    FreeAndNil(qryConsultaEstado);

  end;

end;

constructor TEmpresa.create;
var
  DOC: TXMLDocument;
begin
  try
    if (FileExists('acessoINT_' + frmMenu.usuario + '.xml')) or (FileExists('acessoINT.xml')) then begin
      DOC := TXMLDocument.Create(frmMenu);
      if (FileExists('acessoINT_' + frmMenu.usuario + '.xml')) then
        DOC.LoadFromFile('acessoINT_' + frmMenu.usuario + '.xml')
      else
        DOC.LoadFromFile('acessoINT.xml');
      if DOC.DocumentElement.ChildNodes.FindNode('empresa') <> nil then
        selecionaEmpresa := DOC.DocumentElement.ChildNodes.FindNode('empresa').Attributes['selecao'] = 'SIM';

      FreeAndNil(DOC);
    end else begin
      selecionaEmpresa := False;
    end;

  except
    selecionaEmpresa := False;

  end;

  inherited Create;

end;

destructor TEmpresa.Destroy;
begin
  inherited;
end;

function TEmpresa.executaSelecaodeEmpresas: Boolean;
begin
  Result := selecionaEmpresa;
end;

function TEmpresa.RetornaEmpresaPorEntidade(const cStrEntidade: String): String;
var
  tq:TQuery;
  strSQL:String;
  
begin
  try
    tq := TQuery.Create(DmInt.Db);
    tq.DatabaseName := DmInt.Db.DatabaseName;
    tq.Active := false;

    strSQL := 'select emp_codigo from empresa where ent_codigo = ' + QuotedStr(cStrEntidade);

    tq.Close;
    tq.SQL.Clear;
    tq.Params.Clear;
    tq.SQL.Add(strSQL);
    tq.Open;

    Result := tq.FieldByName('emp_codigo').AsString;

  finally
    tq.Close;
    FreeAndNil(tq);

  end;
  
end;

end.

